package tools;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Classe permettant de lire les champs et valeurs dans un fichier de configuration formaté de la manière suivante :
 * # commentaire
 * CHAMP_1=valeur_1
 * CHAMP_2=valeur_2
 * @author Jean-François Augé
 */
public class ConfParser {
	
	private Map<String, String> champs = new HashMap<String, String>();
	
	/**
	 * Charge en mémoire le fichier rentré en paramètre.
	 * @param f
	 * @throws IOException
	 */
	public void parse(File f) throws IOException {
		FileReader in = new FileReader(f);
		BufferedReader buf = new BufferedReader(in);
		String line;
		String[] values;
		Pattern comm = Pattern.compile("^#");
		Matcher matcher;

		while ( (line = buf.readLine()) != null) {
			matcher = comm.matcher(line);
			if(!matcher.find()) {
				values = line.split("=");
				champs.put(values[0], values[1]);
			}
		}
		
		buf.close();
		in.close();
		
	}
	
	/**
	 * Retourne la valeur pour le champ demandé.
	 * @param champ
	 * @return
	 */
	public String getValue(String champ) {
		return champs.get(champ);
	}
	
	public Map<String, String> getChamps() { return champs; }
	public void setChamps(Map<String, String> champs) { this.champs = champs; }

	
	// tests
	public static void main(String[] args) {
		ConfParser parser = new ConfParser();
		try {
			parser.parse(new File("kraken.conf"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		for(Entry<String, String> entry : parser.getChamps().entrySet())
		    System.out.println(entry.getKey() + "=" + entry.getValue());
		System.out.println(parser.getValue("winPath3"));
	}

}
